intint
posibleMov(tipoJuego * juego, tipoPunto origen, tipoPunto destino, int *existe)
{	int colorAux;
	tipoTablero * tablero;
	
	*existe=0;
	if(juego->turno==JUGADOR_1)
		tablero=juego.tablero1;
	else
		tablero=juego.tablero2;

	colorAux=tablero->matriz[origen.x][origen.y];
	tablero->matriz[origen.x][origen.y]=0;
	
	posCamino(tablero, origen, destino, existe);
	
	tablero->matriz[origen.x][origen.y]=colorAux;
	
	if(*existe == 1)
	{	swap(tablero, origen, destino);
		ceros(tablero);
		return NO_ERROR_C;
		
	}
	ceros(tablero);
	return NO_CAMINO;
}
	

int 
posCamino(tipoTablero * tablero, tipoPunto origen, tipoPunto destino, int *existe)
{	
	tipoPunto punto;


	if( (origen.x == destino.x) && (origen.y == destino.y) )
	{	*existe=1;

		return 0;
	}

	if((tablero->matriz[origen.x][origen.y] == 0) && (*existe == 0))
	{	tablero->matriz[origen.x][origen.y] = -1;
	  
		punto.x=(origen.x)+1;
		punto.y=(origen.y);
		if(pertenMat(tablero, punto))
			posCamino(tablero, punto, destino, existe);
		
		punto.x=(origen.x);
		punto.y=(origen.y)+1;
		if(pertenMat(tablero, punto))
			posCamino(tablero, punto, destino, existe);
		
		punto.x=(origen.x)-1;
		punto.y=(origen.y);
		if(pertenMat(tablero, punto))
			posCamino(tablero, punto, destino, existe);
	
		punto.x=(origen.x);
		punto.y=(origen.y)-1;
		if(pertenMat(tablero, punto))
			posCamino(tablero, punto, destino, existe);
	
	}	
	return 0;

}
int
swap(tipoTablero * tablero, tipoPunto origen, tipoPunto destino)
{
	tablero->matriz[destino.x][destino.y]=tablero->matriz[origen.x][origen.y];
	tablero->matriz[origen.x][origen.y]=0;
	actualizaLibresM(tablero, origen, destino);
	
	return 0;
}
int 
CoordValidas(tipoJuego *juego, tipoPunto origen, tipoPunto destino)
{	tipoTablero * tablero;
	if(juego->turno==JUGADOR_1)
		tablero=juego.tablero1;
	else
		tablero=juego.tablero2;
	int dentro, origValido, destValido;
	dentro=(pertenMat(tablero, Origen) && pertenMat(tablero, Destino));
	origValido=( (tablero->matriz[origen.x][origen.y]) != 0 );
	destValido=( (tablero->matriz[destino.x][destino.y]) == 0 );
	
	return (dentro && origValido && destValido);
}
		
int
pertenMat(tipoTablero * tablero, tipoPunto punto)
{
	int v1, v2;

	v1= (punto.x>=0) && (punto.x<tablero->fils);
	v2= (punto.y>=0) && (punto.y<tablero->cols);

	return v1 && v2;
}

	